package template_2;


//일부는 추상화된 메소드를 사용하지 않았으므로 그냥 상위 클래스의 내용을 쓸 수도있고, 
//경우에 따라 오버라이딩(installOther())을 통해 재정의 할 수도 있다. 
//접근자가 final이라면 오버라이딩 할 수 없겠지만 여기선 public로 선언되어 있다. 
//하지만 상위 클레스에선 하는일이 없다. 그냥 {}만 있을 뿐이다. 
//이렇게 하는일이 없고(혹은 조건없이 같은값을 반환 한다던지 .. 즉 어떤 분기나 로직이 없는..), 
//재정의 가능한 메소드를 '후크(hook)’라 한다. 후크를 구현해 알고리즘에 추가 수행할 수도 있고, 
//이것을 내버려 두면 아무일도 하지 않을 것이다. 


//실행 프로그램(StartApp.java)
public class StartApp {
	public static void main(String args[]) { 
		// 1번pc생성
		PCInstaller pc_01 = new PointPC_01();
		// 2번pc생성
		PCInstaller pc_02 = new PointPC_02();
		// 1번pc 포멧
		pc_01.formatPC();
		// 2번pc 포멧
		pc_02.formatPC();
		// 1번pc os인스톨
		pc_01.installOS();
		// 2번pc os인스톨
		pc_02.installOS();
		// 1번pc 프로그램 설치
		pc_01.installProgram();
		// 2번pc 프로그램 설치
		pc_02.installProgram();
		// 1번pc 메신저 설치
		pc_01.installMessenger();
		// 2번pc 메신저 설치
		pc_02.installMessenger();
		// 1번pc 기타 프로그램 설치. 과연 있을까요?
		pc_01.installOther();
		// 2번pc 기타 프로그램 설치. 과연 있을까요?
		pc_02.installOther();
		
	}
}
